SLA, SLO, SLI

Дмитрий Масленников, «Т-Банк»

Проблема оценки работы SRE

Как понять, сколько сбоев не случилось из-за того, что поработали SRE?

Проблема метрики оценки надежности

SLI — Service Level Indicators

Индикаторы уровня сервиса — важные метрики показывающие пользовательский опыт непосредственно

SLO — Service Level Objectives

Целевые показатели сервиса — значения SLI, которые мы желаем видеть у своего приложения

SLA — Service Level Agreement

Соглашение о уровне сервиса

Как считают надежность

Бюджет ошибок

Что можно делать с бюджетом? — Тратить!

Проблемы при подсчетах надежности

  • Не понятно, что считать уже сломанным (выбор SLI/SLO)
  • Установка желаемых целей сильно выше возможностей
  • Сложно выбрать интервал, на котором считать

Как сделать учет SLA?

Нет готовых удобных инструментов — писать самому

schedule(1m, () => {
    bool has_bad_minute = false;
    int currentMinute = minute(timestamp());
    for (indicator in indicators) {
        if (indicator.fail()) {
            mark_minute_bad(indicator.id, currentMinute);
            has_bad_minute = true;
        }
    }
    if (!has_bad_minute) {
        mark_minute_ok(currentMinute);
    }
})
                

SLI на примере — T-Uber

Сервис такси
  • Похож на «обычный» сервис такси
  • Два мобильных приложения: для пользователей и водителей
  • Умеет оценивать время поездки с учетом пробок и без (когда внешний сервис отвалился)
  • in_request_count — количество запросов от клиентов в разбивке по типам
  • in_request_duration — время выполнения запросов
  • in_request_errors — количество запросов завершившися с ошибкой
  • matching_requests — сколько пришло запросов на поиск автомобиля
  • matching_requests_done_success — сколько таких запросов успешно обработали
  • matching_requests_done_fail — сколько таких запросов не обработали
  • awaiting_requests — сколько человек начинали ждать автомобиль
  • awaiting_requests_done_success — сколько человек дождались подачи
  • awaiting_requests_done_fail — сколько человек не дождались подачи
  • и т.д. про все стадии
  • match_duration — сколько времени ищем водителя
  • estimated_awaiting_time — распределение оценочного времени подачи автомобиля
  • estimated_trip_time — распределение оценочного времени поездки
  • awaiting_time — сколько фактически ждали подачи автомобиля
  • trip_time — сколько фактически длилась поездка
  • estimation_discrepancy_await — разница между предсказанным и фактическим времением ожидания
  • estimation_discrepancy_trip — разница между предсказанным и фактическим времением поездки
  • traffic_jams_fallback_count — запросов не учитывают пробки

Спасибо!

Вопросы?